# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'DevelopmentPods' do
  
  use_frameworks!


#######################################################################
# --------------------------------------------

# 启用 CoCoaPods spec 实现分层分模块设计

# --------------------------------------------

# 验证单个 二方库是否成功分层

# 从底层 ->功能 -> UI ->模块，顺序分层，每个层级应做到能单独编译成功
  
  # ---------- 最底层的基础库 -------------------------------
  # 除了自身， 只引用了同层级的库或无任何引用
  
  # 系统库扩展
  pod 'MYModule/MYExtensions', :path => "./"
  
  # 公共工具类
  pod "MYModule/MYCommon", :path => "./"
  
  # framework等
  pod 'MYModule/MYFrameworks', :path => "./"
  
  
  
  # ----------- 功能库 --------------------------------------
  # 实现特定一项功能，只引用了基础库及功能相关的三方库
  
  # 比如：
  # 数据库表，持久化
  pod 'MYModule/MYDB', :path => "./"
  
  # 基于 数据库表MYDB 的公共Model, 映射 数据库表中的数据
  pod 'MYModule/MYModel', :path => "./"
  
  # 基于 MYModel 的公共 ViewModel ,实现公共的逻辑及与UI/Model层的交互
  pod 'MYModule/MYViewModel', :path => "./"
  
  
  # ------------ UI层 --------------------------------------
  
  # 基于 Model/ViewModel + UI 就形成 一个单页面，一个或多个单页面组合实现某一个具体功能，就形成模块
  # 而我们公司由于有定制的需求，UI层的变动是最大的，所以，UI层建议不再做额外的分层，而是各工程自实现
  # 但是有2种情况，UI也可以做一下分层：
  
  # 1.约定成的公共UI库:
  # 比如：
  # UI的基类
  pod 'MYModule/MYUIKit', :path => "./"
  
  # charts
  pod "MYModule/MYCharts", :path => "./"
  
  # 2. UI多工程复用，不更改，或者只要更改，多个工程还是保持一致的UI, 这种UI到这里其实也是分层到顶了，形成了一个单独的组件
  
  # ...
  # ..
  # .
  
  # ------------ 模块 --------------------------------------
 
  # 模块
  # 由多个单一功能组成实现某一个应用功能
  
  # 模块的划分，主要还是根据业务功能来定
  
  # 比如：
  # 睡眠
  
  # 模块一般是多层组件的组合，遵循的规则与UI分层类似。
  # 现在 假如 有一个 睡眠 模块， 是在多个工程中都使用，并且，都保持一致，也保持一致的迭代。那 睡眠 就可以做成一个模块
  # 举例如下:
  pod "MYModule/MYSleep", :path => "./"
  
  # 分模块之后，其实还会遇到一个问题，就是模块与模块之间的通信，模块页面与另外模块页面的跳转，通用的做法，是引入路由组件
  # 引入路由，会增加代码复杂度，个人觉得并不适合我们的业务。这也是不建议在UI层还去分层的原因.
  

  # 总结
  # 结合公司实际情况， 有大量的定制导致 UI层的变动是很大的，所以做分层设计，个人建议能做的是：
  # 1. 公共扩展，公共工具类，model层， viewModel层。
  # 2. UI层级 做 公共基础库，比如定制很大部分都通过开发者平台，Views 是以后所有View都需要继承使用的公共类，这种强关联业务的，但又基本不改的，才做成UI库
  
#######################################################################

end
